﻿using System;
using System.Linq;
using FinancePortal.Domain.Model;

namespace FinancePortal.Business.Repository
{
    /// <summary>
    /// Interface Repository Base
    /// </summary>
    /// <typeparam name="T">
    /// Parametro Entidade
    /// </typeparam>
    public interface IRepositoryBase<T> where T: Entity
    {
        /// <summary>
        /// Método para salvar uma entidade
        /// </summary>
        /// <param name="entity">
        /// The entity.
        /// </param>
        /// <returns>
        /// A própria entidade
        /// </returns>
        void Save(T entity);

        /// <summary>
        /// Método para exclui uma entidade
        /// </summary>
        /// <param name="entity">
        /// The entity.
        /// </param>
        void Delete(T entity);

        /// <summary>
        /// Método para recuperar uma entidade específica
        /// </summary>
        /// <param name="id">
        /// Código da entidade (PK)
        /// </param>
        /// <returns>
        /// Uma entidade
        /// </returns>
        T GetById(int id);

        /// <summary>
        /// Método para recuperar todas as entidades
        /// </summary>
        /// <returns>
        /// Uma lista de entidades
        /// </returns>
        IQueryable<T> GetAll();
    }
}